<?php 

//счетчик запросов в БД
function sql_query($query) {
    global $global, $sql_time, $queries;
	    if ($global['sql_count'] == 1) {$queries++;}
	 return mysql_query($query);} 

//Многократное долгое хэширование пароля с солью.
function cryptpass($pass,$salt){
$symb=array('~','!','@','#','$','%','^','&','*','?');
	for ($li=0;$li<strlen($pass);$li++){
		$ord=ord($pass[$li]);
	if ($ord>=48 and $ord<=57)
		{$passi.=$symb[$pass[$li]];} 
	else
		{$passi.=$pass[$li];}}	
		
for ($i=1;$i<=32;$i++) {
	 for ($ii=1;$ii<=32;$ii++) {
	  $u=$i*$ii;
	 $salt=md5($salt.$passi);
	 $c=chr($u);
	 
	if(!preg_match('/[^0-9]/ui',$c)) {
		 $salt=md5(md5($c).md5($u).md5($i).md5($ii).md5($salt));
		 $q=substr($salt,0,1);
		 if(!preg_match('/[^0-9]/ui',$q)) {
			  for ($qw=1;$qw<=$q;$qw++) {
				  $salt=md5(md5($c).md5($u).md5($i).md5($ii).md5($salt));
			  }}}
	elseif(!preg_match('/[^A-Za-z]/ui',$c)) {
		 $salt=md5(md5(md5($c).md5($u).md5($i).md5($ii).md5($salt)));
		 $q=substr($salt,0,1);
		 if(!preg_match('/[^0-9]/ui',$q)) {
			  for ($qwe=1;$qwe<=$q;$qwe++) {
				  $salt=md5(md5(md5($c).md5($u).md5($i).md5($ii).md5($salt)));
			  }}}
	else {
		 $salt=md5(md5(md5(md5($c).md5($u).md5($i).md5($ii).md5($salt))));
		 $q=substr($salt,0,1);
		 if(!preg_match('/[^0-9]/ui',$q)) {
			  for ($qwer=1;$qwer<=$q;$qwer++) {
				  $salt=md5(md5(md5(md5($c).md5($u).md5($i).md5($ii).md5($salt))));
			  }}}
		 
 $code=md5(md5($passi).md5($salt));
 }};
 
 return $code;
 }
	 
	 
	 // Удалить сплэши при включенных "магических кавычках"
 function my_stripSlashes($param)
{
    if (! is_array($param)) {
        return stripslashes($param);
    }
    foreach ($param as $k => $v) {
        $param[$k] = my_stripSlashes($v);
    }
    return $param;
}
 
 
//дата по русски 
function parse_date($date) {
	$fdate = explode('-',$date);
	if ($fdate[1]==01) {$rdate=$fdate[2].' января '.$fdate[0]." г.";}
	if ($fdate[1]==02) {$rdate=$fdate[2].' февраля '.$fdate[0]." г.";}
	if ($fdate[1]==03) {$rdate=$fdate[2].' марта '.$fdate[0]." г.";}
	if ($fdate[1]==04) {$rdate=$fdate[2].' апреля '.$fdate[0]." г.";}
	if ($fdate[1]==05) {$rdate=$fdate[2].' мая '.$fdate[0]." г.";}
	if ($fdate[1]==06) {$rdate=$fdate[2].' июня '.$fdate[0]." г.";}
	if ($fdate[1]==07) {$rdate=$fdate[2].' июля '.$fdate[0]." г.";}
	if ($fdate[1]==8) {$rdate=$fdate[2].' августа '.$fdate[0]." г.";}
	if ($fdate[1]==9) {$rdate=$fdate[2].' сентября '.$fdate[0]." г.";}
	if ($fdate[1]==10) {$rdate=$fdate[2].' октября '.$fdate[0]." г.";}
	if ($fdate[1]==11) {$rdate=$fdate[2].' ноября '.$fdate[0]." г.";}
	if ($fdate[1]==12) {$rdate=$fdate[2].' декабря '.$fdate[0]." г.";}	
	 return $rdate;}  
	 
//Месяц по русски	 
function parse_month($month) {	 
if ($month==1) {$months='январь';}
if ($month==2) {$months='февраль';}
if ($month==3) {$months='март';}
if ($month==4) {$months='апрель';}
if ($month==5) {$months='май';}
if ($month==6) {$months='июнь';}
if ($month==7) {$months='июль';}
if ($month==8) {$months='август';}
if ($month==9) {$months='сентябрь';}
if ($month==10) {$months='октябрь';}
if ($month==11) {$months='ноябрь';}
if ($month==12) {$months='декабрь';}
return $months;}  


//неделя по русски
function parse_weekday($weekday) {	 
if ($weekday==1) {$weekdays='Понедельник';}
if ($weekday==2) {$weekdays='Вторник';}
if ($weekday==3) {$weekdays='Среда';}
if ($weekday==4) {$weekdays='Четверг';}
if ($weekday==5) {$weekdays='Пятница';}
if ($weekday==6) {$weekdays='Суббота';}
if ($weekday==7) {$weekdays='Воскресенье';}
return $weekdays;} 

//преобразование УРЛ адресов
// $l==0 преобразовывать все включая "." и "/" иначе все кроме "." и "/".
function translitURL($str,$l=0) 
{
	if ($l==0) {
    $tr = array(
        "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
        "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
        "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
        "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
        "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
        "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
        "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", 
        " "=> "_", "."=> "", "/"=> "_" );
	if (preg_match('/[^A-Za-z0-9_\-]/', $str)) {
    $str = strtr($str,$tr);
    $str = preg_replace('/[^A-Za-z0-9_\-]/', '', $str);}}
	else
	{
		$tr = array(
        "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
        "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
        "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
        "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
        "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
        "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
        "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", 
        " "=> "");
    $str = strtr($str,$tr);}
	 return $str;}
	 
	 
//Заголовок страниц для страниц из базы данных
function pagetitle($a) {
	 $pagez=sql_query ("SELECT title FROM `page` WHERE address='$a'");
	
	 if (mysql_num_rows($pagez)>0) {
	
$page = mysql_fetch_array($pagez);
$a=$page['title'];}
else{$menuz=sql_query ("SELECT title FROM `menu` WHERE address='$a'");
$menu = mysql_fetch_array($menuz);
$a=$menu['title'];}
//else {$a='НЕТ ТАКОЙ СТРАНИЦЫ';}
if ($_GET['page']=='spec' || $_SERVER['SCRIPT_NAME']=='/page/spec.php' || $a=='spec' || $_SERVER['SCRIPT_NAME']=='/spec.php') {$a="Специальности";};
return $a;
}


	
	
//Закрытие HTML тегов в тексте
// © !mharvester
function closetags($text){
//обрезка последнего слова
$text = substr($text, 0, strrpos($text," "));
$text = preg_replace("/<[^>]*$/i", "", $text);
//закрытие тегов
preg_match_all("/<[^a-zA-Z>\/]*([a-zA-Z]{1,50})/i",$text,$otags);
if(count($otags[0])>0){
$fotags=array(); $fctags=array();
preg_match_all("/<[ t]*\/[^a-z]*([a-z]{1,50})/i",$text,$ctags);
foreach($otags[1] as $otag){
$otag = strtolower($otag);
if(isset($fotags[$otag]))$fotags[$otag]++;
else $fotags[$otag] = 1;
}
foreach($ctags[1] as $ctag){
$ctag = strtolower($ctag);
if(isset($fctags[$ctag]))$fctags[$ctag]++;
else $fctags[$ctag] = 1;
}
while(list($tag, $cnt) = each($fotags)){
$fctags[$tag] = isset($fctags[$tag])?$fctags[$tag]:0;
$text.=str_repeat("",abs($fctags[$tag] - $cnt));
}
}
return $text;
}


//удаление папки включая подпапки и все файлы
function removedir ($directory) {
$dir = opendir($directory);
while(($file = readdir($dir)))
{
if ( is_file ($directory."/".$file))
{
unlink ($directory."/".$file);
}
else if ( is_dir ($directory."/".$file) &&
($file != ".") && ($file != ".."))
{
removedir ($directory."/".$file);
}
}
closedir ($dir);
rmdir ($directory);
return TRUE;  }

//Копирование папок с содержимым $verbose- лог
function dircopy($srcdir, $dstdir, $verbose) {
  $num = 0;
  if(!is_dir($dstdir)) mkdir($dstdir);
  if($curdir = opendir($srcdir)) {
    while($file = readdir($curdir)) {
      if($file != '.' && $file != '..') {
        $srcfile = $srcdir . '/' . $file;
       $dstfile = $dstdir . '/' . $file;
       if(is_file($srcfile)) {
         if(is_file($dstfile)) $ow = filemtime($srcfile) - filemtime($dstfile); else $ow = 1;
         if($ow > 0) {
           if($verbose) echo "Copying '$srcfile' to '$dstfile'...";
           if(copy($srcfile, $dstfile)) {
             touch($dstfile, filemtime($srcfile)); $num++;
             if($verbose) echo "OK<br />";
           }
           else echo "Error: File '$srcfile' could not be copied!<br />";
         }                  
       }
       else if(is_dir($srcfile)) {
         $num += dircopy($srcfile, $dstfile, $verbose);
       }
     }
   }
   closedir($curdir);
 }
 return $num;
}
 

//вывод подменю

function getmenu($a) {
	
	$parentmenuz=sql_query ("SELECT * FROM `menu` WHERE `parent`=$a ORDER BY `order` ASC;");
		while ($parentmenu = mysql_fetch_array($parentmenuz)) {
				if ($parentmenu['access']==2 && $auth!=1) continue;
				if ($parentmenu['access']==100 && $admin!='admin') continue;
			echo '<li title="'.$parentmenu['desc'].'" class="dir"'; if ($parentmenu['access']==2) {echo ' style="background-color:#FFD"';} if ($parentmenu['access']==100) {echo ' style="background-color:#BBB"';} echo '><img src="/images/menu/'.$parentmenu['img'].'" alt="'.$parentmenu['desc'].'" />&nbsp;<a href="/menu/'.$parentmenu['address'].'">'.$parentmenu['title'].'</a>
			'; echo'<ul>';
			
			$parentmenuid=$parentmenu['id'];
			
			if ($parentmenu['child']==1) {
				getmenu($parentmenu['id']);
				}
			
			$pages=sql_query ("select * FROM `page` WHERE menu='$parentmenuid'");	
		while ($page = mysql_fetch_array($pages)) {
				if ($page['access']==2 && $auth!=1) continue;
				if ($page['access']==100 && $admin!='admin') continue;
			echo '<li'; if ($page['access']==2) {echo ' style="background-color:#FFD"';} if ($page['access']==100) {echo ' style="background-color:#BBB"';} echo '><img src="/images/menu/'.$page['img'].'" alt="'.$page['title'].'" /><a href="/page/'.$page['address'].'">'.$page['title'].'</a></li>
			';}
			
			echo '</ul></li>
			';}
			}

	
/* Функция проверки строки по регулярным выражениям, заранее заданы типы строк или можно ввести свою регулярку, для этого второму параметру передать False и в третьем написать свое выражение.
Заранее заданные регулярки: 
mail:e-mail адресс (поддерживает кирилические зоны)
digit: только цифры
number: числа ( тоже что и выше, только можно использовать "." и ",")
en: Только латиница
ru: только русские буквы
letter: русские, английские буквы и знак пробела
letnum: буквы и числа.
login: ник (русские и английские буквы, пробел, знак подчеркивания "_" и тире "-", длина 3-16 символов)
date: Проверка формата даты (dd.mm.yy, dd/mm/yyyy и т. д). В качестве разделителя дня, месяца и года предполагается один из символов «/», «.» или «-».

Пример:
$login=regexp($login,'login'); вернет или строку или False если не проходит через фильтр
*/
function regexp ($string,$type=False,$regular=False) {
		if ($type=='mail') {$reg='/^[0-9a-zа-яё_\.-]+@[0-9a-zа-яё_\.-]+\.[0-9a-zа-яё_-]{0,8}$/ui';}
	elseif ($type=='digit') {$reg='/[0-9]$/ui';}
	elseif ($type=='number') {$reg='/^-?\d+[\.|\,]?\d+$/ui';}
	elseif ($type=='endash') {$reg='/^[-a-z]{1,30}$/ui';}
	elseif ($type=='en') {$reg='/^[a-z]/ui';}
	elseif ($type=='ru') {$reg='/^[а-яё]/ui';}
	elseif ($type=='letter') {$reg='/^[-a-zа-яё ]{0,25}$/ui';}
	elseif ($type=='letnum') {$reg='/^[0-9a-zа-яё]/ui';}
	elseif ($type=='login') {$reg='/^[-0-9a-zа-яё\._ ]{3,15}$/ui';}
	elseif ($type=='text') {$reg='/^[-0-9a-zа-яё\.,_ @]{3,15}$/ui';}
	elseif ($type=='date') {$reg='/^(19|20|21|22)\d\d[- \.]([1-9]|0[1-9]|1[012])[- \.]([1-9]|0[1-9]|[12][0-9]|3[01])$/ui';}
	elseif ($type=='ip') {$reg='/^([0-9]|[0-9][0-9]|[01][0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[0-9][0-9]|[01][0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/ui';}
	elseif ($type=='timezone') {$reg='/^[\+\-]+[0-9]{1,2}+:[0-9]{1,2}$/ui';}
	elseif ($type=='img') {$reg='/[.](JPG)|(jpg)|(JPEG)|(jpeg)|(gif)|(GIF)|(png)|(PNG)$/ui';}
	elseif ($type=='version') {$reg='/^[-a-z0-9\.]{0,15}$/ui';}
	elseif ($type=='file')  {$reg='/^[0-9a-z_-]+\.[0-9a-z]{2,6}$/ui';}
	elseif ($type=='fileru')  {$reg='/^[0-9a-zа-яё_-]+\.[0-9a-z]{2,6}$/ui';}
	elseif ($type=='dir') {$reg='/^[-0-9a-z_ ]$/ui';}
	else $reg=$regular;
	if(isset($string)) {
	if(preg_match($reg,$string)) {return $string;} else {return False;}};
}


function unzipload ($file,$dir,$name,$log=False,$del=False) {
	
	require_once('../lib/pclzip.lib.php'); //include class
	
	$source = $file['tmp_name'];
$fn=$file["name"];
$fr=strrchr($fn,'.');
if ($fr=='.zip' || $fr=='.jar' || $fr=='.jad')   {
	$nfn=$name.$fr;
if(move_uploaded_file($source, $dir.$nfn)) {echo "Загружен файл ". $fn . " - ". $file['size'] . " байт. Сохранен как ".$nfn." .<br />";} else
		die("<font color='red'>Error : Unable to upload file</font><br />");//загрузка оригинала в папку $patch_avatar
}
else
{echo 'Неверный тип файла!';}
	

	//create directory in $upload_dir and chmodd directory
	if (!is_dir($dir.$name))
	{if(!@mkdir($dir.$name, 0777))
		die("<font color='red'>Error : Unable to create directory ".$dir.$name."</font><br />");}

	$archive = new PclZip($dir.$nfn);

	if ($archive->extract(PCLZIP_OPT_PATH, $dir.$name) == 0)
		die("<font color='red'>Error : Unable to unzip archive</font>");
	
	//unlink($dir.$file['name']); //delete uploaded file
	
	if ($log==True) {
	//show what was just extracted
	$list = $archive->listContent();
	echo "<br /><b>Files in Archive</b><br />";
	for ($i=0; $i<sizeof($list); $i++) {
	
		if(!$list[$i]['folder'])
			$bytes = " - ".$list[$i]['size']." bytes";
		else
			$bytes = "";
		
		echo "".$list[$i]['filename']."$bytes<br />";
	}}
	if ($del==True) {
	unlink($dir.$nfn); //delete uploaded file
	}
	return True;
	}
	
	
	
	
function unzip ($file,$dir,$name,$log=False,$del=False) {
	
	require_once('../lib/pclzip.lib.php'); //include class
$fn=$file;
$fr=strrchr($fn,'.');
	//create directory in $upload_dir and chmodd directory
	if (!is_dir($dir.$name))
	{if(!@mkdir($dir.$name, 0777))
		die("<font color='red'>Error : Unable to create directory ".$dir.$name."</font><br />");}

	$archive = new PclZip($file);

	if ($archive->extract(PCLZIP_OPT_PATH, $dir.$name) == 0)
		die("<font color='red'>Error : Unable to unzip archive</font>");
	
	if ($log==True) {
	//show what was just extracted
	$list = $archive->listContent();
	echo "<br /><b>Files in Archive</b><br />";
	for ($i=0; $i<sizeof($list); $i++) {
	
		if(!$list[$i]['folder'])
			$bytes = " - ".$list[$i]['size']." bytes";
		else
			$bytes = "";
		
		echo "".$list[$i]['filename']."$bytes<br />";
	}}
	if ($del==True) {
	unlink($file); //delete uploaded file
	}
	return True;
	}





/*
* Function to turn a mysql datetime (YYYY-MM-DD HH:MM:SS) into a unix timestamp
* @param str
* The string to be formatted
*/

function convert_datetime($str) {

list($date, $time) = explode(' ', $str);
list($year, $month, $day) = explode('-', $date);
list($hour, $minute, $second) = explode(':', $time);

$timestamp = mktime($hour, $minute, $second, $month, $day, $year);

return $timestamp;
}




//--------------- Функция правильного вывода веса файла -------------------//
function formatsize($file_size){

if ($file_size >= 1048576000){
$file_size = round(($file_size / 1073741824), 2) . " Gb";
} elseif (
$file_size >= 1024000){
$file_size = round(($file_size / 1048576), 2) . " Mb";
} elseif (
$file_size >= 1000){
$file_size = round(($file_size / 1024), 2) . " Kb";
} else {
$file_size = round($file_size) . " byte";}
return $file_size;
}

//--------------- Функция форматированного вывода размера файла -------------------//
function read_file($file){

if (file_exists($file)) {

return formatsize(filesize($file));

} else {
return 0;
}
}

//--------------- Функция подсчета веса директории -------------------//
function  read_dir($dir) { 

if (empty($allsize)){$allsize = 0;}

if ($path = opendir($dir)) {
while ($file_name = readdir($path)) {
if (($file_name!=='.') && ($file_name!=='..')){ 
if (is_dir($dir."/".$file_name)) {$allsize +=read_dir($dir."/".$file_name);} else { $allsize += filesize($dir."/".$file_name);} 
}} 
closedir ($path); 
}
return  $allsize;
} 


?>